// 1:
var a = []
for (var index = 0; index < 10; index++) {
    a[index] = function () {
        console.log(index);
    }
}
a[6]()
// var 声明的是全局变量，最后打印得到的结果也是指向的全局变量index,所以只能打印出for循环执行的最后一个结果

// 2:
// var tem = 123;
// if (true) {
//     console.log(tem);
//     let tem
// }
// 根据函数的执行顺序，需要先声明变量才能使用
// 函数内的变量声明内层变量会覆盖外层变量，let用于声明块级作用域的变量，tem在被声明之前使用所以报错

//3:
var arr = [12,34,45,1,33]
const result = Math.min(...arr)
console.log(result)

//4:
// var 声明全局变量，如果在函数内部使用会进行变量提升
// let 声明块级变量，作用域仅仅在声明的代码块之内 // 同一作用域下let和const不能声明同名变量，而var可以
// const 声明常量，普通数据类型不可改变，如果是对象或者数组仍然可以更改属性

//5:
var a = 10;
var obj = {
    a: 20,
    fn() {
        setTimeout(() => {
            console.log(this)
            console.log(this.a)
        },0)
    }
}
obj.fn()
// this指向当前函数的调用对象，当前函数体内a的值为20，所以打印20

//6:
//1: 避免变量冲突，symbol对象不会重复
//2: 可以设置私有属性，不能被枚举

//7:
//浅拷贝：增加了一个指针指向已存在的内存地址，指向被复制的内存地址，原数据发生改变，浅拷贝出来的对象也会相应的改变
//深拷贝：copy当前对象或者数组在内存中的地址，开辟新的内存，原数据的改变不会影响新的copy出来的对象的数据。反之也不影响

//8:
// typescript 与 js 本质上是同一种东西，ts在js的基础上增加了很多概念对于js的不足进行了修正和扩展，使js的功能更加的强大

//9: 
//缺点：上手难度高，不能直接在浏览器环境下运行，需要经过编译。
// 对于一些基础库不能兼容，增加开发难度

//优点：强类型验证，避免类型问题，静态类型检查比较早的发现问题
// 增加了接口等多种声明方式，功能更强大，代码更简介

//10:
// 优点可以及时进行回收，减少程序卡顿 // 缺点 无法回收存在循环计数的数据 对于内存的开销比较大

//11:
// 标记整理算法是特殊的标记清除算法。可以对地址进行处理避免空间碎片化。将地址移动到一起进行合并
//选取gc根对象。从这些对象开始向下遍历其子对象,将对象向着一端移动，移动后对象的相对顺序不变，但是对象紧临

//12:
// 小空间存储 32m｜16m 分为两个等大小空间（from使用中活动对象 / to） 整理完成之后copy到to空间里面
// 完成之后清空from进行空间交换 采用时间换空间
// copy之后会出现晋升 to空间超过25% 之后就会晋升，一轮之后仍然存活的变量 晋升到老生代空间

//13:
// 新生代 -》老生代 空间不足触发标记整理
// 采用增量标记进行效率提升
// 在进行大数量的整理是为了避免用时过长，可以在整理完成一段之后继续运行代码执行功能，而后在空闲时继续进行标记。